{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model uncertainty based drift detection on CIFAR-10 and Wine-Quality datasets\n",
    "\n",
    "### Method\n",
    "\n",
    "Model-uncertainty drift detectors aim to directly detect drift that's likely to effect the performance of a model of interest. The approach is to test for change in the number of instances falling into regions of the input space on which the model is uncertain in its predictions. For each instance in the reference set the detector obtains the model's prediction and some associated notion of uncertainty. For example for a classifier this may be the entropy of the predicted label probabilities or for a regressor with dropout layers [dropout Monte Carlo](http://proceedings.mlr.press/v48/gal16.pdf) can be used to provide a notion of uncertainty. The same is done for the test set and if significant differences in uncertainty are detected (via a Kolmogorov-Smirnoff test) then drift is flagged. \n",
    "\n",
    "It is important that the detector uses a reference set that is disjoint from the model's training set (on which the model's confidence may be higher).\n",
    "\n",
    "\n",
    "### Backend\n",
    "\n",
    "For models that require batch evaluation both **PyTorch** and **TensorFlow** frameworks are supported. Alibi Detect does however not install PyTorch for you. \n",
    "Check the [PyTorch docs](https://pytorch.org/) how to do this."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Classifier uncertainty based drift detection\n",
    "\n",
    "We start by demonstrating how to leverage model uncertainty to detect malicious drift when the model of interest is a classifer.\n",
    "\n",
    "#### Dataset\n",
    "\n",
    "[CIFAR10](https://www.cs.toronto.edu/~kriz/cifar.html) consists of 60,000 32 by 32 RGB images equally distributed over 10 classes. We evaluate the drift detector on the CIFAR-10-C dataset ([Hendrycks & Dietterich, 2019](https://arxiv.org/abs/1903.12261)). The instances in\n",
    "CIFAR-10-C have been corrupted and perturbed by various types of noise, blur, brightness etc. at different levels of severity, leading to a gradual decline in the classification model performance. We also check for drift against the original test set with class imbalances. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.environ[\"TF_USE_LEGACY_KERAS\"] = \"1\"\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import tensorflow as tf\n",
    "import torch\n",
    "from torch import nn\n",
    "\n",
    "from alibi_detect.cd import ClassifierUncertaintyDrift, RegressorUncertaintyDrift\n",
    "from alibi_detect.models.tensorflow import scale_by_instance\n",
    "from alibi_detect.utils.fetching import fetch_tf_model, fetch_detector\n",
    "from alibi_detect.saving import save_detector, load_detector\n",
    "from alibi_detect.datasets import fetch_cifar10c, corruption_types_cifar10c\n",
    "from alibi_detect.models.pytorch import trainer\n",
    "from alibi_detect.cd.utils import encompass_batching"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Original CIFAR-10 data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "(X_train, y_train), (X_test, y_test) = tf.keras.datasets.cifar10.load_data()\n",
    "X_train = X_train.astype('float32') / 255\n",
    "X_test = X_test.astype('float32') / 255\n",
    "y_train = y_train.astype('int64').reshape(-1,)\n",
    "y_test = y_test.astype('int64').reshape(-1,)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For CIFAR-10-C, we can select from the following corruption types at 5 severity levels:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['brightness', 'contrast', 'defocus_blur', 'elastic_transform', 'fog', 'frost', 'gaussian_blur', 'gaussian_noise', 'glass_blur', 'impulse_noise', 'jpeg_compression', 'motion_blur', 'pixelate', 'saturate', 'shot_noise', 'snow', 'spatter', 'speckle_noise', 'zoom_blur']\n"
     ]
    }
   ],
   "source": [
    "corruptions = corruption_types_cifar10c()\n",
    "print(corruptions)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's pick a subset of the corruptions at corruption level 5. Each corruption type consists of perturbations on all of the original test set images."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "corruption = ['gaussian_noise', 'motion_blur', 'brightness', 'pixelate']\n",
    "X_corr, y_corr = fetch_cifar10c(corruption=corruption, severity=5, return_X_y=True)\n",
    "X_corr = X_corr.astype('float32') / 255"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We split the original test set in a reference dataset and a dataset which should not be rejected under the no-change null *H<sub>0</sub>*. We also split the corrupted data by corruption type:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(5000, 32, 32, 3) (5000, 32, 32, 3)\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "n_test = X_test.shape[0]\n",
    "idx = np.random.choice(n_test, size=n_test // 2, replace=False)\n",
    "idx_h0 = np.delete(np.arange(n_test), idx, axis=0)\n",
    "X_ref,y_ref = X_test[idx], y_test[idx]\n",
    "X_h0, y_h0 = X_test[idx_h0], y_test[idx_h0]\n",
    "print(X_ref.shape, X_h0.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Class Ref H0\n",
      "0     472 528\n",
      "1     510 490\n",
      "2     498 502\n",
      "3     492 508\n",
      "4     501 499\n",
      "5     495 505\n",
      "6     493 507\n",
      "7     501 499\n",
      "8     516 484\n",
      "9     522 478\n"
     ]
    }
   ],
   "source": [
    "# check that the classes are more or less balanced\n",
    "classes, counts_ref = np.unique(y_ref, return_counts=True)\n",
    "counts_h0 = np.unique(y_h0, return_counts=True)[1]\n",
    "print('Class Ref H0')\n",
    "for cl, cref, ch0 in zip(classes, counts_ref, counts_h0):\n",
    "    assert cref + ch0 == n_test // 10\n",
    "    print('{}     {} {}'.format(cl, cref, ch0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_corr = len(corruption)\n",
    "X_c = [X_corr[i * n_test:(i + 1) * n_test] for i in range(n_corr)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can visualise the same instance for each corruption type:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "tags": [
     "hide_input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<svg height=\"246.958125pt\" version=\"1.1\" viewBox=\"0 0 231.84 246.958125\" width=\"231.84pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2021-04-22T18:23:22.348810</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.4.1, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 246.958125 \n",
       "L 231.84 246.958125 \n",
       "L 231.84 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g clip-path=\"url(#p065d2a6121)\">\n",
       "    <image height=\"218\" id=\"image4794ef8feb\" transform=\"scale(1 -1)translate(0 -218)\" width=\"218\" x=\"7.2\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-21.758125\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- Original -->\n",
       "    <g transform=\"translate(92.44125 16.318125)scale(0.12 -0.12)\">\n",
       "     <defs>\n",
       "      <path d=\"M 2522 4238 \n",
       "Q 1834 4238 1429 3725 \n",
       "Q 1025 3213 1025 2328 \n",
       "Q 1025 1447 1429 934 \n",
       "Q 1834 422 2522 422 \n",
       "Q 3209 422 3611 934 \n",
       "Q 4013 1447 4013 2328 \n",
       "Q 4013 3213 3611 3725 \n",
       "Q 3209 4238 2522 4238 \n",
       "z\n",
       "M 2522 4750 \n",
       "Q 3503 4750 4090 4092 \n",
       "Q 4678 3434 4678 2328 \n",
       "Q 4678 1225 4090 567 \n",
       "Q 3503 -91 2522 -91 \n",
       "Q 1538 -91 948 565 \n",
       "Q 359 1222 359 2328 \n",
       "Q 359 3434 948 4092 \n",
       "Q 1538 4750 2522 4750 \n",
       "z\n",
       "\" id=\"DejaVuSans-4f\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 2631 2963 \n",
       "Q 2534 3019 2420 3045 \n",
       "Q 2306 3072 2169 3072 \n",
       "Q 1681 3072 1420 2755 \n",
       "Q 1159 2438 1159 1844 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1341 3275 1631 3429 \n",
       "Q 1922 3584 2338 3584 \n",
       "Q 2397 3584 2469 3576 \n",
       "Q 2541 3569 2628 3553 \n",
       "L 2631 2963 \n",
       "z\n",
       "\" id=\"DejaVuSans-72\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 603 3500 \n",
       "L 1178 3500 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 3500 \n",
       "z\n",
       "M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 4134 \n",
       "L 603 4134 \n",
       "L 603 4863 \n",
       "z\n",
       "\" id=\"DejaVuSans-69\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 2906 1791 \n",
       "Q 2906 2416 2648 2759 \n",
       "Q 2391 3103 1925 3103 \n",
       "Q 1463 3103 1205 2759 \n",
       "Q 947 2416 947 1791 \n",
       "Q 947 1169 1205 825 \n",
       "Q 1463 481 1925 481 \n",
       "Q 2391 481 2648 825 \n",
       "Q 2906 1169 2906 1791 \n",
       "z\n",
       "M 3481 434 \n",
       "Q 3481 -459 3084 -895 \n",
       "Q 2688 -1331 1869 -1331 \n",
       "Q 1566 -1331 1297 -1286 \n",
       "Q 1028 -1241 775 -1147 \n",
       "L 775 -588 \n",
       "Q 1028 -725 1275 -790 \n",
       "Q 1522 -856 1778 -856 \n",
       "Q 2344 -856 2625 -561 \n",
       "Q 2906 -266 2906 331 \n",
       "L 2906 616 \n",
       "Q 2728 306 2450 153 \n",
       "Q 2172 0 1784 0 \n",
       "Q 1141 0 747 490 \n",
       "Q 353 981 353 1791 \n",
       "Q 353 2603 747 3093 \n",
       "Q 1141 3584 1784 3584 \n",
       "Q 2172 3584 2450 3431 \n",
       "Q 2728 3278 2906 2969 \n",
       "L 2906 3500 \n",
       "L 3481 3500 \n",
       "L 3481 434 \n",
       "z\n",
       "\" id=\"DejaVuSans-67\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3513 2113 \n",
       "L 3513 0 \n",
       "L 2938 0 \n",
       "L 2938 2094 \n",
       "Q 2938 2591 2744 2837 \n",
       "Q 2550 3084 2163 3084 \n",
       "Q 1697 3084 1428 2787 \n",
       "Q 1159 2491 1159 1978 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1366 3272 1645 3428 \n",
       "Q 1925 3584 2291 3584 \n",
       "Q 2894 3584 3203 3211 \n",
       "Q 3513 2838 3513 2113 \n",
       "z\n",
       "\" id=\"DejaVuSans-6e\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 2194 1759 \n",
       "Q 1497 1759 1228 1600 \n",
       "Q 959 1441 959 1056 \n",
       "Q 959 750 1161 570 \n",
       "Q 1363 391 1709 391 \n",
       "Q 2188 391 2477 730 \n",
       "Q 2766 1069 2766 1631 \n",
       "L 2766 1759 \n",
       "L 2194 1759 \n",
       "z\n",
       "M 3341 1997 \n",
       "L 3341 0 \n",
       "L 2766 0 \n",
       "L 2766 531 \n",
       "Q 2569 213 2275 61 \n",
       "Q 1981 -91 1556 -91 \n",
       "Q 1019 -91 701 211 \n",
       "Q 384 513 384 1019 \n",
       "Q 384 1609 779 1909 \n",
       "Q 1175 2209 1959 2209 \n",
       "L 2766 2209 \n",
       "L 2766 2266 \n",
       "Q 2766 2663 2505 2880 \n",
       "Q 2244 3097 1772 3097 \n",
       "Q 1472 3097 1187 3025 \n",
       "Q 903 2953 641 2809 \n",
       "L 641 3341 \n",
       "Q 956 3463 1253 3523 \n",
       "Q 1550 3584 1831 3584 \n",
       "Q 2591 3584 2966 3190 \n",
       "Q 3341 2797 3341 1997 \n",
       "z\n",
       "\" id=\"DejaVuSans-61\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 4863 \n",
       "z\n",
       "\" id=\"DejaVuSans-6c\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-4f\"/>\n",
       "     <use x=\"78.710938\" xlink:href=\"#DejaVuSans-72\"/>\n",
       "     <use x=\"119.824219\" xlink:href=\"#DejaVuSans-69\"/>\n",
       "     <use x=\"147.607422\" xlink:href=\"#DejaVuSans-67\"/>\n",
       "     <use x=\"211.083984\" xlink:href=\"#DejaVuSans-69\"/>\n",
       "     <use x=\"238.867188\" xlink:href=\"#DejaVuSans-6e\"/>\n",
       "     <use x=\"302.246094\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"363.525391\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p065d2a6121\">\n",
       "   <rect height=\"217.44\" width=\"217.44\" x=\"7.2\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<svg height=\"246.958125pt\" version=\"1.1\" viewBox=\"0 0 231.84 246.958125\" width=\"231.84pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2021-04-22T18:23:22.429505</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.4.1, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 246.958125 \n",
       "L 231.84 246.958125 \n",
       "L 231.84 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g clip-path=\"url(#p39b3365aa1)\">\n",
       "    <image height=\"218\" id=\"image2528e2e6d0\" transform=\"scale(1 -1)translate(0 -218)\" width=\"218\" x=\"7.2\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-21.758125\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- gaussian_noise -->\n",
       "    <g transform=\"translate(70.275938 16.318125)scale(0.12 -0.12)\">\n",
       "     <defs>\n",
       "      <path d=\"M 2906 1791 \n",
       "Q 2906 2416 2648 2759 \n",
       "Q 2391 3103 1925 3103 \n",
       "Q 1463 3103 1205 2759 \n",
       "Q 947 2416 947 1791 \n",
       "Q 947 1169 1205 825 \n",
       "Q 1463 481 1925 481 \n",
       "Q 2391 481 2648 825 \n",
       "Q 2906 1169 2906 1791 \n",
       "z\n",
       "M 3481 434 \n",
       "Q 3481 -459 3084 -895 \n",
       "Q 2688 -1331 1869 -1331 \n",
       "Q 1566 -1331 1297 -1286 \n",
       "Q 1028 -1241 775 -1147 \n",
       "L 775 -588 \n",
       "Q 1028 -725 1275 -790 \n",
       "Q 1522 -856 1778 -856 \n",
       "Q 2344 -856 2625 -561 \n",
       "Q 2906 -266 2906 331 \n",
       "L 2906 616 \n",
       "Q 2728 306 2450 153 \n",
       "Q 2172 0 1784 0 \n",
       "Q 1141 0 747 490 \n",
       "Q 353 981 353 1791 \n",
       "Q 353 2603 747 3093 \n",
       "Q 1141 3584 1784 3584 \n",
       "Q 2172 3584 2450 3431 \n",
       "Q 2728 3278 2906 2969 \n",
       "L 2906 3500 \n",
       "L 3481 3500 \n",
       "L 3481 434 \n",
       "z\n",
       "\" id=\"DejaVuSans-67\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 2194 1759 \n",
       "Q 1497 1759 1228 1600 \n",
       "Q 959 1441 959 1056 \n",
       "Q 959 750 1161 570 \n",
       "Q 1363 391 1709 391 \n",
       "Q 2188 391 2477 730 \n",
       "Q 2766 1069 2766 1631 \n",
       "L 2766 1759 \n",
       "L 2194 1759 \n",
       "z\n",
       "M 3341 1997 \n",
       "L 3341 0 \n",
       "L 2766 0 \n",
       "L 2766 531 \n",
       "Q 2569 213 2275 61 \n",
       "Q 1981 -91 1556 -91 \n",
       "Q 1019 -91 701 211 \n",
       "Q 384 513 384 1019 \n",
       "Q 384 1609 779 1909 \n",
       "Q 1175 2209 1959 2209 \n",
       "L 2766 2209 \n",
       "L 2766 2266 \n",
       "Q 2766 2663 2505 2880 \n",
       "Q 2244 3097 1772 3097 \n",
       "Q 1472 3097 1187 3025 \n",
       "Q 903 2953 641 2809 \n",
       "L 641 3341 \n",
       "Q 956 3463 1253 3523 \n",
       "Q 1550 3584 1831 3584 \n",
       "Q 2591 3584 2966 3190 \n",
       "Q 3341 2797 3341 1997 \n",
       "z\n",
       "\" id=\"DejaVuSans-61\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 544 1381 \n",
       "L 544 3500 \n",
       "L 1119 3500 \n",
       "L 1119 1403 \n",
       "Q 1119 906 1312 657 \n",
       "Q 1506 409 1894 409 \n",
       "Q 2359 409 2629 706 \n",
       "Q 2900 1003 2900 1516 \n",
       "L 2900 3500 \n",
       "L 3475 3500 \n",
       "L 3475 0 \n",
       "L 2900 0 \n",
       "L 2900 538 \n",
       "Q 2691 219 2414 64 \n",
       "Q 2138 -91 1772 -91 \n",
       "Q 1169 -91 856 284 \n",
       "Q 544 659 544 1381 \n",
       "z\n",
       "M 1991 3584 \n",
       "L 1991 3584 \n",
       "z\n",
       "\" id=\"DejaVuSans-75\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 2834 3397 \n",
       "L 2834 2853 \n",
       "Q 2591 2978 2328 3040 \n",
       "Q 2066 3103 1784 3103 \n",
       "Q 1356 3103 1142 2972 \n",
       "Q 928 2841 928 2578 \n",
       "Q 928 2378 1081 2264 \n",
       "Q 1234 2150 1697 2047 \n",
       "L 1894 2003 \n",
       "Q 2506 1872 2764 1633 \n",
       "Q 3022 1394 3022 966 \n",
       "Q 3022 478 2636 193 \n",
       "Q 2250 -91 1575 -91 \n",
       "Q 1294 -91 989 -36 \n",
       "Q 684 19 347 128 \n",
       "L 347 722 \n",
       "Q 666 556 975 473 \n",
       "Q 1284 391 1588 391 \n",
       "Q 1994 391 2212 530 \n",
       "Q 2431 669 2431 922 \n",
       "Q 2431 1156 2273 1281 \n",
       "Q 2116 1406 1581 1522 \n",
       "L 1381 1569 \n",
       "Q 847 1681 609 1914 \n",
       "Q 372 2147 372 2553 \n",
       "Q 372 3047 722 3315 \n",
       "Q 1072 3584 1716 3584 \n",
       "Q 2034 3584 2315 3537 \n",
       "Q 2597 3491 2834 3397 \n",
       "z\n",
       "\" id=\"DejaVuSans-73\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 603 3500 \n",
       "L 1178 3500 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 3500 \n",
       "z\n",
       "M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 4134 \n",
       "L 603 4134 \n",
       "L 603 4863 \n",
       "z\n",
       "\" id=\"DejaVuSans-69\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3513 2113 \n",
       "L 3513 0 \n",
       "L 2938 0 \n",
       "L 2938 2094 \n",
       "Q 2938 2591 2744 2837 \n",
       "Q 2550 3084 2163 3084 \n",
       "Q 1697 3084 1428 2787 \n",
       "Q 1159 2491 1159 1978 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1366 3272 1645 3428 \n",
       "Q 1925 3584 2291 3584 \n",
       "Q 2894 3584 3203 3211 \n",
       "Q 3513 2838 3513 2113 \n",
       "z\n",
       "\" id=\"DejaVuSans-6e\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3263 -1063 \n",
       "L 3263 -1509 \n",
       "L -63 -1509 \n",
       "L -63 -1063 \n",
       "L 3263 -1063 \n",
       "z\n",
       "\" id=\"DejaVuSans-5f\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 1959 3097 \n",
       "Q 1497 3097 1228 2736 \n",
       "Q 959 2375 959 1747 \n",
       "Q 959 1119 1226 758 \n",
       "Q 1494 397 1959 397 \n",
       "Q 2419 397 2687 759 \n",
       "Q 2956 1122 2956 1747 \n",
       "Q 2956 2369 2687 2733 \n",
       "Q 2419 3097 1959 3097 \n",
       "z\n",
       "M 1959 3584 \n",
       "Q 2709 3584 3137 3096 \n",
       "Q 3566 2609 3566 1747 \n",
       "Q 3566 888 3137 398 \n",
       "Q 2709 -91 1959 -91 \n",
       "Q 1206 -91 779 398 \n",
       "Q 353 888 353 1747 \n",
       "Q 353 2609 779 3096 \n",
       "Q 1206 3584 1959 3584 \n",
       "z\n",
       "\" id=\"DejaVuSans-6f\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3597 1894 \n",
       "L 3597 1613 \n",
       "L 953 1613 \n",
       "Q 991 1019 1311 708 \n",
       "Q 1631 397 2203 397 \n",
       "Q 2534 397 2845 478 \n",
       "Q 3156 559 3463 722 \n",
       "L 3463 178 \n",
       "Q 3153 47 2828 -22 \n",
       "Q 2503 -91 2169 -91 \n",
       "Q 1331 -91 842 396 \n",
       "Q 353 884 353 1716 \n",
       "Q 353 2575 817 3079 \n",
       "Q 1281 3584 2069 3584 \n",
       "Q 2775 3584 3186 3129 \n",
       "Q 3597 2675 3597 1894 \n",
       "z\n",
       "M 3022 2063 \n",
       "Q 3016 2534 2758 2815 \n",
       "Q 2500 3097 2075 3097 \n",
       "Q 1594 3097 1305 2825 \n",
       "Q 1016 2553 972 2059 \n",
       "L 3022 2063 \n",
       "z\n",
       "\" id=\"DejaVuSans-65\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-67\"/>\n",
       "     <use x=\"63.476562\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"124.755859\" xlink:href=\"#DejaVuSans-75\"/>\n",
       "     <use x=\"188.134766\" xlink:href=\"#DejaVuSans-73\"/>\n",
       "     <use x=\"240.234375\" xlink:href=\"#DejaVuSans-73\"/>\n",
       "     <use x=\"292.333984\" xlink:href=\"#DejaVuSans-69\"/>\n",
       "     <use x=\"320.117188\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"381.396484\" xlink:href=\"#DejaVuSans-6e\"/>\n",
       "     <use x=\"444.775391\" xlink:href=\"#DejaVuSans-5f\"/>\n",
       "     <use x=\"494.775391\" xlink:href=\"#DejaVuSans-6e\"/>\n",
       "     <use x=\"558.154297\" xlink:href=\"#DejaVuSans-6f\"/>\n",
       "     <use x=\"619.335938\" xlink:href=\"#DejaVuSans-69\"/>\n",
       "     <use x=\"647.119141\" xlink:href=\"#DejaVuSans-73\"/>\n",
       "     <use x=\"699.21875\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p39b3365aa1\">\n",
       "   <rect height=\"217.44\" width=\"217.44\" x=\"7.2\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<svg height=\"246.958125pt\" version=\"1.1\" viewBox=\"0 0 231.84 246.958125\" width=\"231.84pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2021-04-22T18:23:22.485790</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.4.1, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 246.958125 \n",
       "L 231.84 246.958125 \n",
       "L 231.84 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g clip-path=\"url(#pc6bcb17f9a)\">\n",
       "    <image height=\"218\" id=\"imagea486871f70\" transform=\"scale(1 -1)translate(0 -218)\" width=\"218\" x=\"7.2\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-21.758125\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- motion_blur -->\n",
       "    <g transform=\"translate(80.166563 16.318125)scale(0.12 -0.12)\">\n",
       "     <defs>\n",
       "      <path d=\"M 3328 2828 \n",
       "Q 3544 3216 3844 3400 \n",
       "Q 4144 3584 4550 3584 \n",
       "Q 5097 3584 5394 3201 \n",
       "Q 5691 2819 5691 2113 \n",
       "L 5691 0 \n",
       "L 5113 0 \n",
       "L 5113 2094 \n",
       "Q 5113 2597 4934 2840 \n",
       "Q 4756 3084 4391 3084 \n",
       "Q 3944 3084 3684 2787 \n",
       "Q 3425 2491 3425 1978 \n",
       "L 3425 0 \n",
       "L 2847 0 \n",
       "L 2847 2094 \n",
       "Q 2847 2600 2669 2842 \n",
       "Q 2491 3084 2119 3084 \n",
       "Q 1678 3084 1418 2786 \n",
       "Q 1159 2488 1159 1978 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1356 3278 1631 3431 \n",
       "Q 1906 3584 2284 3584 \n",
       "Q 2666 3584 2933 3390 \n",
       "Q 3200 3197 3328 2828 \n",
       "z\n",
       "\" id=\"DejaVuSans-6d\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 1959 3097 \n",
       "Q 1497 3097 1228 2736 \n",
       "Q 959 2375 959 1747 \n",
       "Q 959 1119 1226 758 \n",
       "Q 1494 397 1959 397 \n",
       "Q 2419 397 2687 759 \n",
       "Q 2956 1122 2956 1747 \n",
       "Q 2956 2369 2687 2733 \n",
       "Q 2419 3097 1959 3097 \n",
       "z\n",
       "M 1959 3584 \n",
       "Q 2709 3584 3137 3096 \n",
       "Q 3566 2609 3566 1747 \n",
       "Q 3566 888 3137 398 \n",
       "Q 2709 -91 1959 -91 \n",
       "Q 1206 -91 779 398 \n",
       "Q 353 888 353 1747 \n",
       "Q 353 2609 779 3096 \n",
       "Q 1206 3584 1959 3584 \n",
       "z\n",
       "\" id=\"DejaVuSans-6f\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 1172 4494 \n",
       "L 1172 3500 \n",
       "L 2356 3500 \n",
       "L 2356 3053 \n",
       "L 1172 3053 \n",
       "L 1172 1153 \n",
       "Q 1172 725 1289 603 \n",
       "Q 1406 481 1766 481 \n",
       "L 2356 481 \n",
       "L 2356 0 \n",
       "L 1766 0 \n",
       "Q 1100 0 847 248 \n",
       "Q 594 497 594 1153 \n",
       "L 594 3053 \n",
       "L 172 3053 \n",
       "L 172 3500 \n",
       "L 594 3500 \n",
       "L 594 4494 \n",
       "L 1172 4494 \n",
       "z\n",
       "\" id=\"DejaVuSans-74\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 603 3500 \n",
       "L 1178 3500 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 3500 \n",
       "z\n",
       "M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 4134 \n",
       "L 603 4134 \n",
       "L 603 4863 \n",
       "z\n",
       "\" id=\"DejaVuSans-69\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3513 2113 \n",
       "L 3513 0 \n",
       "L 2938 0 \n",
       "L 2938 2094 \n",
       "Q 2938 2591 2744 2837 \n",
       "Q 2550 3084 2163 3084 \n",
       "Q 1697 3084 1428 2787 \n",
       "Q 1159 2491 1159 1978 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1366 3272 1645 3428 \n",
       "Q 1925 3584 2291 3584 \n",
       "Q 2894 3584 3203 3211 \n",
       "Q 3513 2838 3513 2113 \n",
       "z\n",
       "\" id=\"DejaVuSans-6e\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3263 -1063 \n",
       "L 3263 -1509 \n",
       "L -63 -1509 \n",
       "L -63 -1063 \n",
       "L 3263 -1063 \n",
       "z\n",
       "\" id=\"DejaVuSans-5f\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3116 1747 \n",
       "Q 3116 2381 2855 2742 \n",
       "Q 2594 3103 2138 3103 \n",
       "Q 1681 3103 1420 2742 \n",
       "Q 1159 2381 1159 1747 \n",
       "Q 1159 1113 1420 752 \n",
       "Q 1681 391 2138 391 \n",
       "Q 2594 391 2855 752 \n",
       "Q 3116 1113 3116 1747 \n",
       "z\n",
       "M 1159 2969 \n",
       "Q 1341 3281 1617 3432 \n",
       "Q 1894 3584 2278 3584 \n",
       "Q 2916 3584 3314 3078 \n",
       "Q 3713 2572 3713 1747 \n",
       "Q 3713 922 3314 415 \n",
       "Q 2916 -91 2278 -91 \n",
       "Q 1894 -91 1617 61 \n",
       "Q 1341 213 1159 525 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 4863 \n",
       "L 1159 4863 \n",
       "L 1159 2969 \n",
       "z\n",
       "\" id=\"DejaVuSans-62\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 4863 \n",
       "z\n",
       "\" id=\"DejaVuSans-6c\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 544 1381 \n",
       "L 544 3500 \n",
       "L 1119 3500 \n",
       "L 1119 1403 \n",
       "Q 1119 906 1312 657 \n",
       "Q 1506 409 1894 409 \n",
       "Q 2359 409 2629 706 \n",
       "Q 2900 1003 2900 1516 \n",
       "L 2900 3500 \n",
       "L 3475 3500 \n",
       "L 3475 0 \n",
       "L 2900 0 \n",
       "L 2900 538 \n",
       "Q 2691 219 2414 64 \n",
       "Q 2138 -91 1772 -91 \n",
       "Q 1169 -91 856 284 \n",
       "Q 544 659 544 1381 \n",
       "z\n",
       "M 1991 3584 \n",
       "L 1991 3584 \n",
       "z\n",
       "\" id=\"DejaVuSans-75\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 2631 2963 \n",
       "Q 2534 3019 2420 3045 \n",
       "Q 2306 3072 2169 3072 \n",
       "Q 1681 3072 1420 2755 \n",
       "Q 1159 2438 1159 1844 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1341 3275 1631 3429 \n",
       "Q 1922 3584 2338 3584 \n",
       "Q 2397 3584 2469 3576 \n",
       "Q 2541 3569 2628 3553 \n",
       "L 2631 2963 \n",
       "z\n",
       "\" id=\"DejaVuSans-72\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-6d\"/>\n",
       "     <use x=\"97.412109\" xlink:href=\"#DejaVuSans-6f\"/>\n",
       "     <use x=\"158.59375\" xlink:href=\"#DejaVuSans-74\"/>\n",
       "     <use x=\"197.802734\" xlink:href=\"#DejaVuSans-69\"/>\n",
       "     <use x=\"225.585938\" xlink:href=\"#DejaVuSans-6f\"/>\n",
       "     <use x=\"286.767578\" xlink:href=\"#DejaVuSans-6e\"/>\n",
       "     <use x=\"350.146484\" xlink:href=\"#DejaVuSans-5f\"/>\n",
       "     <use x=\"400.146484\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"463.623047\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"491.40625\" xlink:href=\"#DejaVuSans-75\"/>\n",
       "     <use x=\"554.785156\" xlink:href=\"#DejaVuSans-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"pc6bcb17f9a\">\n",
       "   <rect height=\"217.44\" width=\"217.44\" x=\"7.2\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<svg height=\"246.958125pt\" version=\"1.1\" viewBox=\"0 0 231.84 246.958125\" width=\"231.84pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2021-04-22T18:23:22.539365</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.4.1, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 246.958125 \n",
       "L 231.84 246.958125 \n",
       "L 231.84 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g clip-path=\"url(#pf4b59c2b91)\">\n",
       "    <image height=\"218\" id=\"image1bf25d06e2\" transform=\"scale(1 -1)translate(0 -218)\" width=\"218\" x=\"7.2\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-21.758125\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- brightness -->\n",
       "    <g transform=\"translate(84.268125 16.318125)scale(0.12 -0.12)\">\n",
       "     <defs>\n",
       "      <path d=\"M 3116 1747 \n",
       "Q 3116 2381 2855 2742 \n",
       "Q 2594 3103 2138 3103 \n",
       "Q 1681 3103 1420 2742 \n",
       "Q 1159 2381 1159 1747 \n",
       "Q 1159 1113 1420 752 \n",
       "Q 1681 391 2138 391 \n",
       "Q 2594 391 2855 752 \n",
       "Q 3116 1113 3116 1747 \n",
       "z\n",
       "M 1159 2969 \n",
       "Q 1341 3281 1617 3432 \n",
       "Q 1894 3584 2278 3584 \n",
       "Q 2916 3584 3314 3078 \n",
       "Q 3713 2572 3713 1747 \n",
       "Q 3713 922 3314 415 \n",
       "Q 2916 -91 2278 -91 \n",
       "Q 1894 -91 1617 61 \n",
       "Q 1341 213 1159 525 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 4863 \n",
       "L 1159 4863 \n",
       "L 1159 2969 \n",
       "z\n",
       "\" id=\"DejaVuSans-62\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 2631 2963 \n",
       "Q 2534 3019 2420 3045 \n",
       "Q 2306 3072 2169 3072 \n",
       "Q 1681 3072 1420 2755 \n",
       "Q 1159 2438 1159 1844 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1341 3275 1631 3429 \n",
       "Q 1922 3584 2338 3584 \n",
       "Q 2397 3584 2469 3576 \n",
       "Q 2541 3569 2628 3553 \n",
       "L 2631 2963 \n",
       "z\n",
       "\" id=\"DejaVuSans-72\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 603 3500 \n",
       "L 1178 3500 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 3500 \n",
       "z\n",
       "M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 4134 \n",
       "L 603 4134 \n",
       "L 603 4863 \n",
       "z\n",
       "\" id=\"DejaVuSans-69\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 2906 1791 \n",
       "Q 2906 2416 2648 2759 \n",
       "Q 2391 3103 1925 3103 \n",
       "Q 1463 3103 1205 2759 \n",
       "Q 947 2416 947 1791 \n",
       "Q 947 1169 1205 825 \n",
       "Q 1463 481 1925 481 \n",
       "Q 2391 481 2648 825 \n",
       "Q 2906 1169 2906 1791 \n",
       "z\n",
       "M 3481 434 \n",
       "Q 3481 -459 3084 -895 \n",
       "Q 2688 -1331 1869 -1331 \n",
       "Q 1566 -1331 1297 -1286 \n",
       "Q 1028 -1241 775 -1147 \n",
       "L 775 -588 \n",
       "Q 1028 -725 1275 -790 \n",
       "Q 1522 -856 1778 -856 \n",
       "Q 2344 -856 2625 -561 \n",
       "Q 2906 -266 2906 331 \n",
       "L 2906 616 \n",
       "Q 2728 306 2450 153 \n",
       "Q 2172 0 1784 0 \n",
       "Q 1141 0 747 490 \n",
       "Q 353 981 353 1791 \n",
       "Q 353 2603 747 3093 \n",
       "Q 1141 3584 1784 3584 \n",
       "Q 2172 3584 2450 3431 \n",
       "Q 2728 3278 2906 2969 \n",
       "L 2906 3500 \n",
       "L 3481 3500 \n",
       "L 3481 434 \n",
       "z\n",
       "\" id=\"DejaVuSans-67\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3513 2113 \n",
       "L 3513 0 \n",
       "L 2938 0 \n",
       "L 2938 2094 \n",
       "Q 2938 2591 2744 2837 \n",
       "Q 2550 3084 2163 3084 \n",
       "Q 1697 3084 1428 2787 \n",
       "Q 1159 2491 1159 1978 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 4863 \n",
       "L 1159 4863 \n",
       "L 1159 2956 \n",
       "Q 1366 3272 1645 3428 \n",
       "Q 1925 3584 2291 3584 \n",
       "Q 2894 3584 3203 3211 \n",
       "Q 3513 2838 3513 2113 \n",
       "z\n",
       "\" id=\"DejaVuSans-68\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 1172 4494 \n",
       "L 1172 3500 \n",
       "L 2356 3500 \n",
       "L 2356 3053 \n",
       "L 1172 3053 \n",
       "L 1172 1153 \n",
       "Q 1172 725 1289 603 \n",
       "Q 1406 481 1766 481 \n",
       "L 2356 481 \n",
       "L 2356 0 \n",
       "L 1766 0 \n",
       "Q 1100 0 847 248 \n",
       "Q 594 497 594 1153 \n",
       "L 594 3053 \n",
       "L 172 3053 \n",
       "L 172 3500 \n",
       "L 594 3500 \n",
       "L 594 4494 \n",
       "L 1172 4494 \n",
       "z\n",
       "\" id=\"DejaVuSans-74\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3513 2113 \n",
       "L 3513 0 \n",
       "L 2938 0 \n",
       "L 2938 2094 \n",
       "Q 2938 2591 2744 2837 \n",
       "Q 2550 3084 2163 3084 \n",
       "Q 1697 3084 1428 2787 \n",
       "Q 1159 2491 1159 1978 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1366 3272 1645 3428 \n",
       "Q 1925 3584 2291 3584 \n",
       "Q 2894 3584 3203 3211 \n",
       "Q 3513 2838 3513 2113 \n",
       "z\n",
       "\" id=\"DejaVuSans-6e\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3597 1894 \n",
       "L 3597 1613 \n",
       "L 953 1613 \n",
       "Q 991 1019 1311 708 \n",
       "Q 1631 397 2203 397 \n",
       "Q 2534 397 2845 478 \n",
       "Q 3156 559 3463 722 \n",
       "L 3463 178 \n",
       "Q 3153 47 2828 -22 \n",
       "Q 2503 -91 2169 -91 \n",
       "Q 1331 -91 842 396 \n",
       "Q 353 884 353 1716 \n",
       "Q 353 2575 817 3079 \n",
       "Q 1281 3584 2069 3584 \n",
       "Q 2775 3584 3186 3129 \n",
       "Q 3597 2675 3597 1894 \n",
       "z\n",
       "M 3022 2063 \n",
       "Q 3016 2534 2758 2815 \n",
       "Q 2500 3097 2075 3097 \n",
       "Q 1594 3097 1305 2825 \n",
       "Q 1016 2553 972 2059 \n",
       "L 3022 2063 \n",
       "z\n",
       "\" id=\"DejaVuSans-65\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 2834 3397 \n",
       "L 2834 2853 \n",
       "Q 2591 2978 2328 3040 \n",
       "Q 2066 3103 1784 3103 \n",
       "Q 1356 3103 1142 2972 \n",
       "Q 928 2841 928 2578 \n",
       "Q 928 2378 1081 2264 \n",
       "Q 1234 2150 1697 2047 \n",
       "L 1894 2003 \n",
       "Q 2506 1872 2764 1633 \n",
       "Q 3022 1394 3022 966 \n",
       "Q 3022 478 2636 193 \n",
       "Q 2250 -91 1575 -91 \n",
       "Q 1294 -91 989 -36 \n",
       "Q 684 19 347 128 \n",
       "L 347 722 \n",
       "Q 666 556 975 473 \n",
       "Q 1284 391 1588 391 \n",
       "Q 1994 391 2212 530 \n",
       "Q 2431 669 2431 922 \n",
       "Q 2431 1156 2273 1281 \n",
       "Q 2116 1406 1581 1522 \n",
       "L 1381 1569 \n",
       "Q 847 1681 609 1914 \n",
       "Q 372 2147 372 2553 \n",
       "Q 372 3047 722 3315 \n",
       "Q 1072 3584 1716 3584 \n",
       "Q 2034 3584 2315 3537 \n",
       "Q 2597 3491 2834 3397 \n",
       "z\n",
       "\" id=\"DejaVuSans-73\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"63.476562\" xlink:href=\"#DejaVuSans-72\"/>\n",
       "     <use x=\"104.589844\" xlink:href=\"#DejaVuSans-69\"/>\n",
       "     <use x=\"132.373047\" xlink:href=\"#DejaVuSans-67\"/>\n",
       "     <use x=\"195.849609\" xlink:href=\"#DejaVuSans-68\"/>\n",
       "     <use x=\"259.228516\" xlink:href=\"#DejaVuSans-74\"/>\n",
       "     <use x=\"298.4375\" xlink:href=\"#DejaVuSans-6e\"/>\n",
       "     <use x=\"361.816406\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"423.339844\" xlink:href=\"#DejaVuSans-73\"/>\n",
       "     <use x=\"475.439453\" xlink:href=\"#DejaVuSans-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"pf4b59c2b91\">\n",
       "   <rect height=\"217.44\" width=\"217.44\" x=\"7.2\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<svg height=\"246.958125pt\" version=\"1.1\" viewBox=\"0 0 231.84 246.958125\" width=\"231.84pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2021-04-22T18:23:22.594231</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.4.1, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 246.958125 \n",
       "L 231.84 246.958125 \n",
       "L 231.84 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g clip-path=\"url(#pa1aa32ec41)\">\n",
       "    <image height=\"218\" id=\"imagecf8599ee0a\" transform=\"scale(1 -1)translate(0 -218)\" width=\"218\" x=\"7.2\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-21.758125\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- pixelate -->\n",
       "    <g transform=\"translate(92.000625 16.318125)scale(0.12 -0.12)\">\n",
       "     <defs>\n",
       "      <path d=\"M 1159 525 \n",
       "L 1159 -1331 \n",
       "L 581 -1331 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2969 \n",
       "Q 1341 3281 1617 3432 \n",
       "Q 1894 3584 2278 3584 \n",
       "Q 2916 3584 3314 3078 \n",
       "Q 3713 2572 3713 1747 \n",
       "Q 3713 922 3314 415 \n",
       "Q 2916 -91 2278 -91 \n",
       "Q 1894 -91 1617 61 \n",
       "Q 1341 213 1159 525 \n",
       "z\n",
       "M 3116 1747 \n",
       "Q 3116 2381 2855 2742 \n",
       "Q 2594 3103 2138 3103 \n",
       "Q 1681 3103 1420 2742 \n",
       "Q 1159 2381 1159 1747 \n",
       "Q 1159 1113 1420 752 \n",
       "Q 1681 391 2138 391 \n",
       "Q 2594 391 2855 752 \n",
       "Q 3116 1113 3116 1747 \n",
       "z\n",
       "\" id=\"DejaVuSans-70\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 603 3500 \n",
       "L 1178 3500 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 3500 \n",
       "z\n",
       "M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 4134 \n",
       "L 603 4134 \n",
       "L 603 4863 \n",
       "z\n",
       "\" id=\"DejaVuSans-69\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3513 3500 \n",
       "L 2247 1797 \n",
       "L 3578 0 \n",
       "L 2900 0 \n",
       "L 1881 1375 \n",
       "L 863 0 \n",
       "L 184 0 \n",
       "L 1544 1831 \n",
       "L 300 3500 \n",
       "L 978 3500 \n",
       "L 1906 2253 \n",
       "L 2834 3500 \n",
       "L 3513 3500 \n",
       "z\n",
       "\" id=\"DejaVuSans-78\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 3597 1894 \n",
       "L 3597 1613 \n",
       "L 953 1613 \n",
       "Q 991 1019 1311 708 \n",
       "Q 1631 397 2203 397 \n",
       "Q 2534 397 2845 478 \n",
       "Q 3156 559 3463 722 \n",
       "L 3463 178 \n",
       "Q 3153 47 2828 -22 \n",
       "Q 2503 -91 2169 -91 \n",
       "Q 1331 -91 842 396 \n",
       "Q 353 884 353 1716 \n",
       "Q 353 2575 817 3079 \n",
       "Q 1281 3584 2069 3584 \n",
       "Q 2775 3584 3186 3129 \n",
       "Q 3597 2675 3597 1894 \n",
       "z\n",
       "M 3022 2063 \n",
       "Q 3016 2534 2758 2815 \n",
       "Q 2500 3097 2075 3097 \n",
       "Q 1594 3097 1305 2825 \n",
       "Q 1016 2553 972 2059 \n",
       "L 3022 2063 \n",
       "z\n",
       "\" id=\"DejaVuSans-65\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 4863 \n",
       "z\n",
       "\" id=\"DejaVuSans-6c\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 2194 1759 \n",
       "Q 1497 1759 1228 1600 \n",
       "Q 959 1441 959 1056 \n",
       "Q 959 750 1161 570 \n",
       "Q 1363 391 1709 391 \n",
       "Q 2188 391 2477 730 \n",
       "Q 2766 1069 2766 1631 \n",
       "L 2766 1759 \n",
       "L 2194 1759 \n",
       "z\n",
       "M 3341 1997 \n",
       "L 3341 0 \n",
       "L 2766 0 \n",
       "L 2766 531 \n",
       "Q 2569 213 2275 61 \n",
       "Q 1981 -91 1556 -91 \n",
       "Q 1019 -91 701 211 \n",
       "Q 384 513 384 1019 \n",
       "Q 384 1609 779 1909 \n",
       "Q 1175 2209 1959 2209 \n",
       "L 2766 2209 \n",
       "L 2766 2266 \n",
       "Q 2766 2663 2505 2880 \n",
       "Q 2244 3097 1772 3097 \n",
       "Q 1472 3097 1187 3025 \n",
       "Q 903 2953 641 2809 \n",
       "L 641 3341 \n",
       "Q 956 3463 1253 3523 \n",
       "Q 1550 3584 1831 3584 \n",
       "Q 2591 3584 2966 3190 \n",
       "Q 3341 2797 3341 1997 \n",
       "z\n",
       "\" id=\"DejaVuSans-61\" transform=\"scale(0.015625)\"/>\n",
       "      <path d=\"M 1172 4494 \n",
       "L 1172 3500 \n",
       "L 2356 3500 \n",
       "L 2356 3053 \n",
       "L 1172 3053 \n",
       "L 1172 1153 \n",
       "Q 1172 725 1289 603 \n",
       "Q 1406 481 1766 481 \n",
       "L 2356 481 \n",
       "L 2356 0 \n",
       "L 1766 0 \n",
       "Q 1100 0 847 248 \n",
       "Q 594 497 594 1153 \n",
       "L 594 3053 \n",
       "L 172 3053 \n",
       "L 172 3500 \n",
       "L 594 3500 \n",
       "L 594 4494 \n",
       "L 1172 4494 \n",
       "z\n",
       "\" id=\"DejaVuSans-74\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-70\"/>\n",
       "     <use x=\"63.476562\" xlink:href=\"#DejaVuSans-69\"/>\n",
       "     <use x=\"91.259766\" xlink:href=\"#DejaVuSans-78\"/>\n",
       "     <use x=\"147.314453\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"208.837891\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"236.621094\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"297.900391\" xlink:href=\"#DejaVuSans-74\"/>\n",
       "     <use x=\"337.109375\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"pa1aa32ec41\">\n",
       "   <rect height=\"217.44\" width=\"217.44\" x=\"7.2\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "i = 1\n",
    "\n",
    "n_test = X_test.shape[0]\n",
    "plt.title('Original')\n",
    "plt.axis('off')\n",
    "plt.imshow(X_test[i])\n",
    "plt.show()\n",
    "for _ in range(len(corruption)):\n",
    "    plt.title(corruption[_])\n",
    "    plt.axis('off')\n",
    "    plt.imshow(X_corr[n_test * _+ i])\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also verify that the performance of a classification model on CIFAR-10 drops significantly on this perturbed dataset:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test set accuracy:\n",
      "Original 0.9278\n",
      "gaussian_noise 0.2208\n",
      "motion_blur 0.6339\n",
      "brightness 0.8913\n",
      "pixelate 0.3666\n"
     ]
    }
   ],
   "source": [
    "dataset = 'cifar10'\n",
    "model = 'resnet32'\n",
    "clf = fetch_tf_model(dataset, model)\n",
    "acc = clf.evaluate(scale_by_instance(X_test), y_test, batch_size=128, verbose=0)[1]\n",
    "print('Test set accuracy:')\n",
    "print('Original {:.4f}'.format(acc))\n",
    "clf_accuracy = {'original': acc}\n",
    "for _ in range(len(corruption)):\n",
    "    acc = clf.evaluate(scale_by_instance(X_c[_]), y_test, batch_size=128, verbose=0)[1]\n",
    "    clf_accuracy[corruption[_]] = acc\n",
    "    print('{} {:.4f}'.format(corruption[_], acc))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Given the drop in performance, it is important that we detect the harmful data drift!\n",
    "\n",
    "#### Detect drift\n",
    "\n",
    "Unlike many other approaches we needn't specify a dimension-reducing preprocessing step as the detector operates directly on the data as it is input to the model of interest. In fact, the two-stage projection  input -> prediction -> uncertainty can be thought of as the projection from the input space onto the real line, ready to perform the test.\n",
    "\n",
    "We simply pass the model to the detector and inform it that the predictions should be interpreted as 'probs' rather than 'logits' (i.e. a softmax has already been applied). By default `uncertainty_type='entropy'` is used as the notion of uncertainty for classifier predictions, however `uncertainty_type='margin'` can be specified to deem the classifier's prediction uncertain if they fall within a margin (e.g. in \\[0.45,0.55\\] for binary classifier probabilities) (similar to [Sethi and Kantardzic (2017)](https://arxiv.org/abs/1704.00023))."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "cd = ClassifierUncertaintyDrift(\n",
    "  X_ref, model=clf, backend='tensorflow', p_val=0.05, preds_type='probs'\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's check whether the detector thinks drift occurred on the different test sets and time the prediction calls:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "from timeit import default_timer as timer\n",
    "\n",
    "labels = ['No!', 'Yes!']\n",
    "\n",
    "def make_predictions(cd, x_h0, x_corr, corruption):\n",
    "    t = timer()\n",
    "    preds = cd.predict(x_h0)\n",
    "    dt = timer() - t\n",
    "    print('No corruption')\n",
    "    print('Drift? {}'.format(labels[preds['data']['is_drift']]))\n",
    "    print('Feature-wise p-values:')\n",
    "    print(preds['data']['p_val'])\n",
    "    print(f'Time (s) {dt:.3f}')\n",
    "    \n",
    "    if isinstance(x_corr, list):\n",
    "        for x, c in zip(x_corr, corruption):\n",
    "            t = timer()\n",
    "            preds = cd.predict(x)\n",
    "            dt = timer() - t\n",
    "            print('')\n",
    "            print(f'Corruption type: {c}')\n",
    "            print('Drift? {}'.format(labels[preds['data']['is_drift']]))\n",
    "            print('Feature-wise p-values:')\n",
    "            print(preds['data']['p_val'])\n",
    "            print(f'Time (s) {dt:.3f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "No corruption\n",
      "Drift? No!\n",
      "Feature-wise p-values:\n",
      "[0.7868902]\n",
      "Time (s) 15.574\n",
      "\n",
      "Corruption type: gaussian_noise\n",
      "Drift? Yes!\n",
      "Feature-wise p-values:\n",
      "[0.]\n",
      "Time (s) 33.066\n",
      "\n",
      "Corruption type: motion_blur\n",
      "Drift? Yes!\n",
      "Feature-wise p-values:\n",
      "[0.]\n",
      "Time (s) 32.637\n",
      "\n",
      "Corruption type: brightness\n",
      "Drift? No!\n",
      "Feature-wise p-values:\n",
      "[0.1102559]\n",
      "Time (s) 34.126\n",
      "\n",
      "Corruption type: pixelate\n",
      "Drift? Yes!\n",
      "Feature-wise p-values:\n",
      "[0.]\n",
      "Time (s) 34.351\n"
     ]
    }
   ],
   "source": [
    "make_predictions(cd, X_h0, X_c, corruption)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note here how drift is only detected for the corrupted datasets on which the model's performance is significantly degraded. For the 'brightness' corruption, for which the model maintains 89% classification accuracy, the change in model uncertainty is not deemed significant (p-value 0.11, above the 0.05 threshold). For the other corruptions which signficiantly hamper model performance, the malicious drift is detected."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Regressor uncertainty based drift detection\n",
    "\n",
    "We now demonstrate how to leverage model uncertainty to detect malicious drift when the model of interest is a regressor. This is a less general approach as regressors often make point-predictions with no associated notion of uncertainty. However, if the model makes its predictions by ensembling the predicitons of sub-models then we can consider the variation in the sub-model predictions as a notion of uncertainty. `RegressorUncertaintyDetector` facilitates models that output a vector of such sub-model predictions (`uncertainty_type='ensemble'`) or deep learning models that include dropout layers and can therefore (as noted by [Gal and Ghahramani 2016](https://arxiv.org/abs/1506.02142)) be considered as an ensemble (`uncertainty_type='mc_dropout'`, the default option).\n",
    "\n",
    "#### Dataset\n",
    "\n",
    "The [Wine Quality Data Set](https://archive.ics.uci.edu/ml/datasets/wine+quality) consists of 1599 and 4898 samples of red and white wine respectively. Each sample has an associated quality (as determined by experts) and 11 numeric features indicating its acidity, density, pH etc. We consider the regression problem of tring to predict the quality of red wine sample given these features. We will then consider whether the model remains suitable for predicting the quality of white wine samples or whether the associated change in the underlying distribution should be considered as malicious drift.\n",
    "\n",
    "First we load in the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fixed acidity</th>\n",
       "      <th>volatile acidity</th>\n",
       "      <th>citric acid</th>\n",
       "      <th>residual sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free sulfur dioxide</th>\n",
       "      <th>total sulfur dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>quality</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "      <td>1599.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>8.319637</td>\n",
       "      <td>0.527821</td>\n",
       "      <td>0.270976</td>\n",
       "      <td>2.538806</td>\n",
       "      <td>0.087467</td>\n",
       "      <td>15.874922</td>\n",
       "      <td>46.467792</td>\n",
       "      <td>0.996747</td>\n",
       "      <td>3.311113</td>\n",
       "      <td>0.658149</td>\n",
       "      <td>10.422983</td>\n",
       "      <td>5.636023</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.741096</td>\n",
       "      <td>0.179060</td>\n",
       "      <td>0.194801</td>\n",
       "      <td>1.409928</td>\n",
       "      <td>0.047065</td>\n",
       "      <td>10.460157</td>\n",
       "      <td>32.895324</td>\n",
       "      <td>0.001887</td>\n",
       "      <td>0.154386</td>\n",
       "      <td>0.169507</td>\n",
       "      <td>1.065668</td>\n",
       "      <td>0.807569</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>4.600000</td>\n",
       "      <td>0.120000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>0.012000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>0.990070</td>\n",
       "      <td>2.740000</td>\n",
       "      <td>0.330000</td>\n",
       "      <td>8.400000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>7.100000</td>\n",
       "      <td>0.390000</td>\n",
       "      <td>0.090000</td>\n",
       "      <td>1.900000</td>\n",
       "      <td>0.070000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>0.995600</td>\n",
       "      <td>3.210000</td>\n",
       "      <td>0.550000</td>\n",
       "      <td>9.500000</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>7.900000</td>\n",
       "      <td>0.520000</td>\n",
       "      <td>0.260000</td>\n",
       "      <td>2.200000</td>\n",
       "      <td>0.079000</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>38.000000</td>\n",
       "      <td>0.996750</td>\n",
       "      <td>3.310000</td>\n",
       "      <td>0.620000</td>\n",
       "      <td>10.200000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>9.200000</td>\n",
       "      <td>0.640000</td>\n",
       "      <td>0.420000</td>\n",
       "      <td>2.600000</td>\n",
       "      <td>0.090000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.997835</td>\n",
       "      <td>3.400000</td>\n",
       "      <td>0.730000</td>\n",
       "      <td>11.100000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>15.900000</td>\n",
       "      <td>1.580000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>15.500000</td>\n",
       "      <td>0.611000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>289.000000</td>\n",
       "      <td>1.003690</td>\n",
       "      <td>4.010000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>14.900000</td>\n",
       "      <td>8.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       fixed acidity  volatile acidity  citric acid  residual sugar  \\\n",
       "count    1599.000000       1599.000000  1599.000000     1599.000000   \n",
       "mean        8.319637          0.527821     0.270976        2.538806   \n",
       "std         1.741096          0.179060     0.194801        1.409928   \n",
       "min         4.600000          0.120000     0.000000        0.900000   \n",
       "25%         7.100000          0.390000     0.090000        1.900000   \n",
       "50%         7.900000          0.520000     0.260000        2.200000   \n",
       "75%         9.200000          0.640000     0.420000        2.600000   \n",
       "max        15.900000          1.580000     1.000000       15.500000   \n",
       "\n",
       "         chlorides  free sulfur dioxide  total sulfur dioxide      density  \\\n",
       "count  1599.000000          1599.000000           1599.000000  1599.000000   \n",
       "mean      0.087467            15.874922             46.467792     0.996747   \n",
       "std       0.047065            10.460157             32.895324     0.001887   \n",
       "min       0.012000             1.000000              6.000000     0.990070   \n",
       "25%       0.070000             7.000000             22.000000     0.995600   \n",
       "50%       0.079000            14.000000             38.000000     0.996750   \n",
       "75%       0.090000            21.000000             62.000000     0.997835   \n",
       "max       0.611000            72.000000            289.000000     1.003690   \n",
       "\n",
       "                pH    sulphates      alcohol      quality  \n",
       "count  1599.000000  1599.000000  1599.000000  1599.000000  \n",
       "mean      3.311113     0.658149    10.422983     5.636023  \n",
       "std       0.154386     0.169507     1.065668     0.807569  \n",
       "min       2.740000     0.330000     8.400000     3.000000  \n",
       "25%       3.210000     0.550000     9.500000     5.000000  \n",
       "50%       3.310000     0.620000    10.200000     6.000000  \n",
       "75%       3.400000     0.730000    11.100000     6.000000  \n",
       "max       4.010000     2.000000    14.900000     8.000000  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "red = pd.read_csv(\n",
    "    \"http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv\", sep=';'\n",
    ")\n",
    "white = pd.read_csv(\n",
    "    \"http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv\", sep=';'\n",
    ")\n",
    "red.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that the data for both red and white wine samples take the same format."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fixed acidity</th>\n",
       "      <th>volatile acidity</th>\n",
       "      <th>citric acid</th>\n",
       "      <th>residual sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free sulfur dioxide</th>\n",
       "      <th>total sulfur dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>quality</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "      <td>4898.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>6.854788</td>\n",
       "      <td>0.278241</td>\n",
       "      <td>0.334192</td>\n",
       "      <td>6.391415</td>\n",
       "      <td>0.045772</td>\n",
       "      <td>35.308085</td>\n",
       "      <td>138.360657</td>\n",
       "      <td>0.994027</td>\n",
       "      <td>3.188267</td>\n",
       "      <td>0.489847</td>\n",
       "      <td>10.514267</td>\n",
       "      <td>5.877909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.843868</td>\n",
       "      <td>0.100795</td>\n",
       "      <td>0.121020</td>\n",
       "      <td>5.072058</td>\n",
       "      <td>0.021848</td>\n",
       "      <td>17.007137</td>\n",
       "      <td>42.498065</td>\n",
       "      <td>0.002991</td>\n",
       "      <td>0.151001</td>\n",
       "      <td>0.114126</td>\n",
       "      <td>1.230621</td>\n",
       "      <td>0.885639</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>3.800000</td>\n",
       "      <td>0.080000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.600000</td>\n",
       "      <td>0.009000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>9.000000</td>\n",
       "      <td>0.987110</td>\n",
       "      <td>2.720000</td>\n",
       "      <td>0.220000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>6.300000</td>\n",
       "      <td>0.210000</td>\n",
       "      <td>0.270000</td>\n",
       "      <td>1.700000</td>\n",
       "      <td>0.036000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>108.000000</td>\n",
       "      <td>0.991723</td>\n",
       "      <td>3.090000</td>\n",
       "      <td>0.410000</td>\n",
       "      <td>9.500000</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>6.800000</td>\n",
       "      <td>0.260000</td>\n",
       "      <td>0.320000</td>\n",
       "      <td>5.200000</td>\n",
       "      <td>0.043000</td>\n",
       "      <td>34.000000</td>\n",
       "      <td>134.000000</td>\n",
       "      <td>0.993740</td>\n",
       "      <td>3.180000</td>\n",
       "      <td>0.470000</td>\n",
       "      <td>10.400000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>7.300000</td>\n",
       "      <td>0.320000</td>\n",
       "      <td>0.390000</td>\n",
       "      <td>9.900000</td>\n",
       "      <td>0.050000</td>\n",
       "      <td>46.000000</td>\n",
       "      <td>167.000000</td>\n",
       "      <td>0.996100</td>\n",
       "      <td>3.280000</td>\n",
       "      <td>0.550000</td>\n",
       "      <td>11.400000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>14.200000</td>\n",
       "      <td>1.100000</td>\n",
       "      <td>1.660000</td>\n",
       "      <td>65.800000</td>\n",
       "      <td>0.346000</td>\n",
       "      <td>289.000000</td>\n",
       "      <td>440.000000</td>\n",
       "      <td>1.038980</td>\n",
       "      <td>3.820000</td>\n",
       "      <td>1.080000</td>\n",
       "      <td>14.200000</td>\n",
       "      <td>9.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       fixed acidity  volatile acidity  citric acid  residual sugar  \\\n",
       "count    4898.000000       4898.000000  4898.000000     4898.000000   \n",
       "mean        6.854788          0.278241     0.334192        6.391415   \n",
       "std         0.843868          0.100795     0.121020        5.072058   \n",
       "min         3.800000          0.080000     0.000000        0.600000   \n",
       "25%         6.300000          0.210000     0.270000        1.700000   \n",
       "50%         6.800000          0.260000     0.320000        5.200000   \n",
       "75%         7.300000          0.320000     0.390000        9.900000   \n",
       "max        14.200000          1.100000     1.660000       65.800000   \n",
       "\n",
       "         chlorides  free sulfur dioxide  total sulfur dioxide      density  \\\n",
       "count  4898.000000          4898.000000           4898.000000  4898.000000   \n",
       "mean      0.045772            35.308085            138.360657     0.994027   \n",
       "std       0.021848            17.007137             42.498065     0.002991   \n",
       "min       0.009000             2.000000              9.000000     0.987110   \n",
       "25%       0.036000            23.000000            108.000000     0.991723   \n",
       "50%       0.043000            34.000000            134.000000     0.993740   \n",
       "75%       0.050000            46.000000            167.000000     0.996100   \n",
       "max       0.346000           289.000000            440.000000     1.038980   \n",
       "\n",
       "                pH    sulphates      alcohol      quality  \n",
       "count  4898.000000  4898.000000  4898.000000  4898.000000  \n",
       "mean      3.188267     0.489847    10.514267     5.877909  \n",
       "std       0.151001     0.114126     1.230621     0.885639  \n",
       "min       2.720000     0.220000     8.000000     3.000000  \n",
       "25%       3.090000     0.410000     9.500000     5.000000  \n",
       "50%       3.180000     0.470000    10.400000     6.000000  \n",
       "75%       3.280000     0.550000    11.400000     6.000000  \n",
       "max       3.820000     1.080000    14.200000     9.000000  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "white.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We shuffle and normalise the data such that each feature takes a value in \\[0,1\\], as does the quality we seek to predict."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "red, white = np.asarray(red, np.float32), np.asarray(white, np.float32)\n",
    "n_red, n_white = red.shape[0], white.shape[0]\n",
    "\n",
    "col_maxes = red.max(axis=0)\n",
    "red, white = red / col_maxes, white / col_maxes\n",
    "red, white = red[np.random.permutation(n_red)], white[np.random.permutation(n_white)]\n",
    "X, y = red[:, :-1], red[:, -1:]\n",
    "X_corr, y_corr = white[:, :-1], white[:, -1:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We split the red wine data into a set on which to train the model, a reference set with which to instantiate the detector and a set which the detector should not flag drift. We then instantiate a DataLoader to pass the training data to a PyTorch model in batches."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train, y_train = X[:(n_red//2)], y[:(n_red//2)]\n",
    "X_ref, y_ref = X[(n_red//2):(3*n_red//4)], y[(n_red//2):(3*n_red//4)]\n",
    "X_h0, y_h0 = X[(3*n_red//4):], y[(3*n_red//4):]\n",
    "\n",
    "X_train_ds = torch.utils.data.TensorDataset(torch.tensor(X_train), torch.tensor(y_train))\n",
    "X_train_dl = torch.utils.data.DataLoader(X_train_ds, batch_size=32, shuffle=True, drop_last=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Regression model\n",
    "\n",
    "We now define the regression model that we'll train to predict the quality from the features. The exact details aren't important other than the presence of at least one dropout layer. We then train the model for 20 epochs to optimise the mean square error on the training data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/oliver/Projects/alibi-detect/.venv/lib/python3.8/site-packages/torch/cuda/__init__.py:52: UserWarning: CUDA initialization: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx (Triggered internally at  /pytorch/c10/cuda/CUDAFunctions.cpp:100.)\n",
      "  return torch._C._cuda_getDeviceCount() > 0\n",
      "Epoch 1/30: 100%|██████████| 24/24 [00:00<00:00, 267.60it/s, loss=0.119]\n",
      "Epoch 2/30: 100%|██████████| 24/24 [00:00<00:00, 267.14it/s, loss=0.0857]\n",
      "Epoch 3/30: 100%|██████████| 24/24 [00:00<00:00, 266.90it/s, loss=0.043]\n",
      "Epoch 4/30: 100%|██████████| 24/24 [00:00<00:00, 250.43it/s, loss=0.0553]\n",
      "Epoch 5/30: 100%|██████████| 24/24 [00:00<00:00, 187.70it/s, loss=0.0365]\n",
      "Epoch 6/30: 100%|██████████| 24/24 [00:00<00:00, 260.13it/s, loss=0.03]\n",
      "Epoch 7/30: 100%|██████████| 24/24 [00:00<00:00, 245.26it/s, loss=0.0552]\n",
      "Epoch 8/30: 100%|██████████| 24/24 [00:00<00:00, 241.64it/s, loss=0.0335]\n",
      "Epoch 9/30: 100%|██████████| 24/24 [00:00<00:00, 229.60it/s, loss=0.0254]\n",
      "Epoch 10/30: 100%|██████████| 24/24 [00:00<00:00, 244.06it/s, loss=0.0223]\n",
      "Epoch 11/30: 100%|██████████| 24/24 [00:00<00:00, 225.92it/s, loss=0.0224]\n",
      "Epoch 12/30: 100%|██████████| 24/24 [00:00<00:00, 204.65it/s, loss=0.0254]\n",
      "Epoch 13/30: 100%|██████████| 24/24 [00:00<00:00, 226.55it/s, loss=0.0236]\n",
      "Epoch 14/30: 100%|██████████| 24/24 [00:00<00:00, 226.15it/s, loss=0.0247]\n",
      "Epoch 15/30: 100%|██████████| 24/24 [00:00<00:00, 250.90it/s, loss=0.0292]\n",
      "Epoch 16/30: 100%|██████████| 24/24 [00:00<00:00, 208.73it/s, loss=0.0263]\n",
      "Epoch 17/30: 100%|██████████| 24/24 [00:00<00:00, 294.98it/s, loss=0.0163]\n",
      "Epoch 18/30: 100%|██████████| 24/24 [00:00<00:00, 173.03it/s, loss=0.0223]\n",
      "Epoch 19/30: 100%|██████████| 24/24 [00:00<00:00, 186.12it/s, loss=0.0244]\n",
      "Epoch 20/30: 100%|██████████| 24/24 [00:00<00:00, 228.75it/s, loss=0.0295]\n",
      "Epoch 21/30: 100%|██████████| 24/24 [00:00<00:00, 240.64it/s, loss=0.0218]\n",
      "Epoch 22/30: 100%|██████████| 24/24 [00:00<00:00, 242.33it/s, loss=0.019]\n",
      "Epoch 23/30: 100%|██████████| 24/24 [00:00<00:00, 275.11it/s, loss=0.0257]\n",
      "Epoch 24/30: 100%|██████████| 24/24 [00:00<00:00, 267.61it/s, loss=0.0165]\n",
      "Epoch 25/30: 100%|██████████| 24/24 [00:00<00:00, 290.65it/s, loss=0.0192]\n",
      "Epoch 26/30: 100%|██████████| 24/24 [00:00<00:00, 259.52it/s, loss=0.0224]\n",
      "Epoch 27/30: 100%|██████████| 24/24 [00:00<00:00, 244.17it/s, loss=0.0173]\n",
      "Epoch 28/30: 100%|██████████| 24/24 [00:00<00:00, 261.72it/s, loss=0.0159]\n",
      "Epoch 29/30: 100%|██████████| 24/24 [00:00<00:00, 293.25it/s, loss=0.012]\n",
      "Epoch 30/30: 100%|██████████| 24/24 [00:00<00:00, 298.45it/s, loss=0.022]\n"
     ]
    }
   ],
   "source": [
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "\n",
    "reg = nn.Sequential(\n",
    "    nn.Linear(11, 16),\n",
    "    nn.ReLU(),\n",
    "    nn.Dropout(0.5),\n",
    "    nn.Linear(16, 32),\n",
    "    nn.ReLU(),\n",
    "    nn.Dropout(0.5),\n",
    "    nn.Linear(32, 1)\n",
    ").to(device)\n",
    "\n",
    "trainer(reg, nn.MSELoss(), X_train_dl, device, torch.optim.Adam, learning_rate=0.001, epochs=30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now evaluate the trained model on both unseen samples of red wine and white wine. We see that, unsurprisingly, the model is better able to predict the quality of unseen red wine samples."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE when predicting the quality of unseen red wine samples: 0.008570569567382336\n",
      "MSE when predicting the quality of unseen white wine samples: 0.014613097533583641\n"
     ]
    }
   ],
   "source": [
    "reg = reg.eval()\n",
    "reg_fn = encompass_batching(reg, backend='pytorch', batch_size=32)\n",
    "preds_ref = reg_fn(X_ref)\n",
    "preds_corr = reg_fn(X_corr)\n",
    "\n",
    "ref_mse = np.square(preds_ref - y_ref).mean()\n",
    "corr_mse = np.square(preds_corr - y_corr).mean()\n",
    "\n",
    "print(f'MSE when predicting the quality of unseen red wine samples: {ref_mse}')\n",
    "print(f'MSE when predicting the quality of unseen white wine samples: {corr_mse}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Detect drift\n",
    "\n",
    "We now look at whether a regressor-uncertainty detector would have picked up on this malicious drift. We instantiate the detector and obtain drift predictions on both the held-out red-wine samples and the white-wine samples. We specify `uncertainty_type='mc_dropout'` in this case, but alternatively we could have trained an ensemble model that for each instance outputs a vector of multiple independent predictions and specified `uncertainty_type='ensemble'`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drift detected on unseen red wine samples? no\n",
      "Drift detected on white wine samples? yes\n",
      "p-value on unseen red wine samples? [0.23237702]\n",
      "p-value on white wine samples? [1.7934791e-10]\n"
     ]
    }
   ],
   "source": [
    "cd = RegressorUncertaintyDrift(\n",
    "    X_ref, model=reg, backend='pytorch', p_val=0.05, uncertainty_type='mc_dropout', n_evals=100\n",
    ")\n",
    "preds_h0 = cd.predict(X_h0)\n",
    "preds_h1 = cd.predict(X_corr)\n",
    "\n",
    "print(f\"Drift detected on unseen red wine samples? {'yes' if preds_h0['data']['is_drift']==1 else 'no'}\")\n",
    "print(f\"Drift detected on white wine samples? {'yes' if preds_h1['data']['is_drift']==1 else 'no'}\")\n",
    "\n",
    "print(f\"p-value on unseen red wine samples? {preds_h0['data']['p_val']}\")\n",
    "print(f\"p-value on white wine samples? {preds_h1['data']['p_val']}\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
